// pages/company/member.js
const companyService = require('../../services/company.js')

Page({
    /**
     * 页面的初始数据
     */
    data: {
        memberList: [], // 员工列表
        loading: false, // 加载状态
        refreshing: false, // 刷新状态
        hasMore: true, // 是否有更多数据
        page: 1, // 当前页码
        pageSize: 10, // 每页数量
        total: 0, // 总数量
        company: null, // 公司信息
        error: null, // 错误信息
        showAddDialog: false, // 是否显示添加员工弹窗
        phone: '', // 手机号
        adding: false // 添加中状态
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        this.loadMemberList(true)
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
        // 页面显示时刷新数据
        this.loadMemberList(true)
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {
        this.refreshMemberList()
    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {
        this.loadMoreMemberList()
    },

    /**
     * 加载员工列表
     * @param {boolean} reset 是否重置列表
     */
    async loadMemberList(reset = false) {
        if (this.data.loading) return

        try {
            this.setData({
                loading: true,
                error: null
            })

            const params = {
                page: reset ? 1 : this.data.page,
                page_size: this.data.pageSize
            }

            const result = await companyService.memberList(params)

            if (result.success) {
                const { list, total, current_page, per_page, last_page, company } = result.data

                this.setData({
                    memberList: reset ? list : [...this.data.memberList, ...list],
                    total,
                    page: current_page,
                    pageSize: per_page,
                    hasMore: current_page < last_page,
                    company,
                    loading: false
                })
            } else {
                this.setData({
                    error: result.message || '获取员工列表失败',
                    loading: false
                })
                wx.showToast({
                    title: result.message || '获取员工列表失败',
                    icon: 'none'
                })
            }
        } catch (error) {
            console.error('加载员工列表失败:', error)
            this.setData({
                error: '网络错误，请稍后重试',
                loading: false
            })
            wx.showToast({
                title: '网络错误，请稍后重试',
                icon: 'none'
            })
        }
    },

    /**
     * 刷新员工列表
     */
    async refreshMemberList() {
        this.setData({
            refreshing: true,
            page: 1,
            hasMore: true
        })

        await this.loadMemberList(true)

        this.setData({
            refreshing: false
        })

        wx.stopPullDownRefresh()
    },

    /**
     * 加载更多员工列表
     */
    async loadMoreMemberList() {
        if (!this.data.hasMore || this.data.loading) return

        this.setData({
            page: this.data.page + 1
        })

        await this.loadMemberList(false)
    },

    /**
     * 重试加载
     */
    retryLoad() {
        this.loadMemberList(true)
    },

    /**
     * 删除会员
     */
    deleteMember(e) {
        const userId = e.currentTarget.dataset.userId
        const userName = e.currentTarget.dataset.userName

        wx.showModal({
            title: '确认删除',
            content: `确定要将"${userName}"从公司中移除吗？`,
            confirmText: '删除',
            confirmColor: '#ff4757',
            cancelText: '取消',
            success: async (res) => {
                if (res.confirm) {
                    await this.confirmDeleteMember(userId, userName)
                }
            }
        })
    },

    /**
     * 确认删除会员
     */
    async confirmDeleteMember(userId, userName) {
        try {
            wx.showLoading({
                title: '删除中...',
                mask: true
            })

            const result = await companyService.removeMember(userId)

            wx.hideLoading()

            if (result.success) {
                wx.showToast({
                    title: '删除成功',
                    icon: 'success'
                })

                // 从列表中移除该会员
                const newMemberList = this.data.memberList.filter(item => item.id !== userId)
                this.setData({
                    memberList: newMemberList
                })

                // 更新公司信息中的员工总数
                if (this.data.company) {
                    this.setData({
                        'company.total_members': this.data.company.total_members - 1
                    })
                }
            } else {
                wx.showToast({
                    title: result.message || '删除失败',
                    icon: 'none'
                })
            }
        } catch (error) {
            wx.hideLoading()
            console.error('删除会员失败:', error)
            wx.showToast({
                title: '网络错误，请稍后重试',
                icon: 'none'
            })
        }
    },

    addMember() {
        this.setData({
            showAddDialog: true,
            phone: ''
        })
    },

    /**
     * 关闭添加员工弹窗
     */
    onCloseAddDialog() {
        this.setData({
            showAddDialog: false,
            phone: '',
            adding: false
        })
    },


    /**
     * 手机号输入变化
     */
    onPhoneInput(e) {
        this.setData({
            phone: e.detail
        })
    },

    /**
     * 确认添加员工
     */
    async onConfirmAddMember() {
        const phone = this.data.phone

        if (!phone) {
            wx.showToast({
                title: '请输入手机号',
                icon: 'none'
            })
            return false;
        }

        // 验证手机号格式
        if (!/^1[3-9]\d{9}$/.test(phone)) {
            wx.showToast({
                title: '手机号格式不正确',
                icon: 'none'
            })
            return
        }

        try {
            this.setData({
                adding: true
            })

            const result = await companyService.addMember(phone)

            if (result.success) {
                // 添加成功时关闭弹窗并刷新列表
                this.setData({
                    adding: false,
                    showAddDialog: false,
                    phone: ''
                })

                wx.showToast({
                    title: '添加成功',
                    icon: 'success'
                })

                // 刷新员工列表
                this.loadMemberList(true)
            } else {
                // 添加失败时重置loading状态，弹窗保持打开
                this.setData({
                    adding: false
                })

                wx.showToast({
                    title: result.message || '添加失败',
                    icon: 'none'
                })
            }
        } catch (error) {
            // 网络错误时重置loading状态，弹窗保持打开
            this.setData({
                adding: false
            })
            console.error('添加员工失败:', error)
            wx.showToast({
                title: '网络错误，请稍后重试',
                icon: 'none'
            })
        }
    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {
        return {
            title: '员工管理',
            path: '/pages/company/member'
        }
    }
})